package view;

import javax.swing.*;
import controller.*;

import java.awt.*;
import java.util.*;

import model.*;

public class Ventana extends JFrame {

	//--Contenedor--//
	private Container container;
	
	//--Elementos en pantalla--//
	public Vector<Elemento> elementos = new Vector<Elemento>();
	public Vector<Elemento> elementosColisionables = new Vector<Elemento>();
	
	//--Label para logo--//
	private JLabel intro;
	
	//--Pelota--//
	public Pelota pelota;
	
	//--Jugadores--//
	private JugadorDerecha jugadorDerecha;
	private JugadorIzquierda jugadorIzquierda;
	
	//--Paredes--//
	private Pared paredSuperior;
	private Pared paredInferior;
		
	//--Variables Contadores--//
	public static int marcadorIzquierda = 0;
	public static int marcadorDerecha = 0;
	
	//--Variables para mostrar marcador--//
	private JLabel gol;
	private JLabel marcadorIzq;
	private JLabel marcadorDer;
	
	public Ventana() {
				
		//---Configurando la Ventana---//
		super("Pong!"); 
		
		container = this.getContentPane();
		this.setLayout(null);
		
		this.setSize(800, 500);
		this.setResizable(false);
		container.setBackground(Color.BLACK);
		
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//---Crear Intro---//
		this.crearIntro();
						
		//--Mostrar Ventana--//
		this.setVisible(true);		

		//--Mostrar Logo--//
		this.mostarIntro();
		
		//--Crear Pelota--//
		this.crearPelota();		
		
		//--Crear Paredes--//
		this.crearParedes();
		
		//--Crear Jugadores--//
		this.crearJugadores();
		
		//--Crear Marcador--//
		this.crearMarcador();
		
		//--Repaint para mostrar todo--//
		this.repaint();
		
        //--Controlador del Juego--//
		Controlador controlador = new Controlador(this);
		controlador.start();
	}

	private void crearJugadores() {
		
		//--Jugador Derecha--//
		JugadorDerecha jugadorDerecha = new JugadorDerecha(760, 200, 15, 100); 
		
		elementos.add(jugadorDerecha);
		elementosColisionables.add(jugadorDerecha);
		
		//--Jugador Izquierda--//
		JugadorIzquierda jugadorIzquierda = new JugadorIzquierda(25, 200, 15, 100); 
		
		elementos.add(jugadorIzquierda);
		elementosColisionables.add(jugadorIzquierda);
		
		//--Listeners--//
		this.addKeyListener(jugadorDerecha);
		this.addKeyListener(jugadorIzquierda);

		this.setFocusable(true);
		this.requestFocusInWindow();
	}

	private void crearParedes() {
		//--Pared Superior--//
		int ancho = 800;
		int alto = 30;
		
		int posicionX = 0;
		int posicionY = 5;
		
		paredSuperior = new Pared(posicionX, posicionY, ancho, alto);
		
		elementos.add(paredSuperior);
		elementosColisionables.add(paredSuperior);
	
		//--Pared Inferior--//
		posicionY =488;
		
		paredInferior = new Pared(posicionX, posicionY, ancho, alto);
		
		elementos.add(paredInferior);
		elementosColisionables.add(paredInferior);
	}

	private void crearPelota() {
		int posicionX = this.getWidth()/2;
		int posicionY = this.getHeight()/2;
		
		int ancho = 15;
		int alto = 15;
		
		int velocidadX = 5;
		int velocidadY = 5;
		
		pelota = new Pelota(posicionX, posicionY, ancho, alto, velocidadX, velocidadY, this);
		
		elementos.add(pelota);
	}

	public void paint(Graphics g) {
		super.paint(g);
		
		Iterator<Elemento> iterador = elementos.iterator();
		
        for (; iterador.hasNext();) {
        	Elemento actor = iterador.next();
        	actor.pintar(g);
        }   

   	}

	private void crearIntro() {
		intro = new JLabel(new ImageIcon("src/logo.png"));
		intro.setForeground(Color.WHITE);
		intro.setLocation(150, 140);
		intro.setSize(498, 191);
		intro.setVisible(false);

		container.add(intro);	
	}
	
	private void mostarIntro() {
		intro.setVisible(true);

		try {
			Thread.sleep(2500);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		intro.setVisible(false);
	}
	
	public Vector<Elemento> getElementosColisionables() {
		return this.elementosColisionables;
	}
	
	public Pelota getPelota() {
		return this.pelota;
	}

	private void crearMarcador() {
		//--Gol--//
		gol = new JLabel(new ImageIcon("src/gol.png"));
		gol.setForeground(Color.WHITE);
		gol.setSize(400, 100);
		gol.setLocation(200, 60);
		gol.setVisible(false);
		
		container.add(gol);
	
		//--Marcadr Izquierda--//
		marcadorIzq = new JLabel(marcadorIzquierda + "");
		marcadorIzq.setForeground(Color.WHITE);
		marcadorIzq.setSize(300, 200);
		marcadorIzq.setLocation(120, 250);
		marcadorIzq.setFont(new Font("Arial", Font.PLAIN, 150));
		marcadorIzq.setVisible(false);
		
		container.add(marcadorIzq);
		
		//--Marcador Derecha--//
		marcadorDer = new JLabel(marcadorDerecha + "");
		marcadorDer.setForeground(Color.WHITE);
		marcadorDer.setSize(300, 200);
		marcadorDer.setLocation(600, 250);
		marcadorDer.setFont(new Font("Arial", Font.PLAIN, 150));
		marcadorDer.setVisible(false);
		
		container.add(marcadorDer);	
	}
	
	public void mostrarMarcador() {
		//--Actualizo Marcadores--//
		marcadorIzq.setText(marcadorIzquierda + "");
		marcadorDer.setText(marcadorDerecha + "");
		
		//--Muestro Marcadores--//
		gol.setVisible(true);
		marcadorIzq.setVisible(true);
		marcadorDer.setVisible(true);
	}
	
	public void ocultarMarcador() {
		//--Oculto Marcadores--//
		gol.setVisible(false);
		marcadorIzq.setVisible(false);
		marcadorDer.setVisible(false);
	}
	
}
